#include "actuator_control.h"
#include "ice_cream_control.h"
#include <stdio.h>
#include <string.h>

void msh_cmd_actuator(int argc, char **argv)  
{
    if (argc < 2) {
        printf("命令格式错误！正确用法:\r\n");
        printf("  act init\r\n");
        printf("  act <device><0|1>  \r\n");
        printf("  act help 查询所有命令\r\n");
        return;
    }

    // 处理 init 命令
    if (strcmp(argv[1], "init") == 0) {
        if (argc != 2) {
            printf("用法错误: act init\r\n");
            return;
        }
        actuator_init();
        return;
    }

    // 处理 help 命令
    if (strcmp(argv[1], "help") == 0) {
        if (argc != 2) {
            printf("用法错误: act help\r\n");
            return;
        }
        printf("可用命令(0-关 1-开):\r\n");
        printf("  act help     - 显示帮助信息\r\n");
        printf("  act init     - 初始化硬件\r\n");
        printf("  act com<0|1> - 控制压缩机\r\n");
        printf("  act hea<0|1> - 控制制热阀\r\n");
        printf("  act coo<0|1> - 控制制冷阀\r\n");
        printf("  act pre<0|1> - 控制预冷阀\r\n");
        printf("  act mot<0|1> - 控制主电机\r\n");
        printf("  act pum<0|1> - 控制膨化泵\r\n");
        printf("  act lig<0|1> - 控制杀菌灯\r\n");
        printf("  act plu<0|1> - 控制出料推杆\r\n");
        return;
    }

    // 处理设备控制命令
    if (argc != 2) {
        printf("命令格式错误！正确用法:\r\n");
        printf("  act <device><0|1>\r\n");
        return;
    }

    const char *dev = argv[1];
    bool en = false;  // 默认关闭

    // 判断设备名称和后缀，解析设备控制命令
    if (dev[3] == '0') {
        en = false;  // 后缀是0，表示关
    } else if (dev[3] == '1') {
        en = true;   // 后缀是1，表示开
    } else {
        printf("无效的命令格式: %s (请确保命令后缀为0或1)\r\n", dev);
        return;
    }

    // 处理设备控制逻辑
    if (strncmp(dev, "com", 3) == 0) {
        actuator_set_compressor(en);
    } else if (strncmp(dev, "hea", 3) == 0) {
        actuator_set_freezing_heater_valve(en);
    } else if (strncmp(dev, "coo", 3) == 0) {
        actuator_set_cooling_valve(en);
    } else if (strncmp(dev, "pre", 3) == 0) {
        actuator_set_precool_valve(en);
    } else if (strncmp(dev, "mot", 3) == 0) {
        actuator_set_main_motor(en);
    } else if (strncmp(dev, "pum", 3) == 0) {
        actuator_set_pump(en);
    } else if (strncmp(dev, "lig", 3) == 0) {
        actuator_set_sterilize_light(en);
    } else if (strncmp(dev, "plu", 3) == 0) {
        actuator_set_discharge_plunger(en);
    } else {
        printf("未知设备: %s\r\n", dev);
    }
}


// 模拟硬件控制实现
void actuator_init(void) {
    ice_cream_control_init();
    printf("Actuator initialized\n");
}

// 压缩机控制
void actuator_set_compressor(bool enable) {
    control_main_press(enable);
    printf("Compressor: %s\n", enable ? "ON" : "OFF");
}

// 制热阀控制
void actuator_set_freezing_heater_valve(bool enable) {
    control_heating_solenoid(enable);
    printf("Bypass valve: %s\n", enable ? "ON" : "OFF");
}

// 制冷阀控制
void actuator_set_cooling_valve(bool enable) {
    control_refrigeration_solenoid(enable);
    printf("Cooling valve: %s\n", enable ? "ON" : "OFF");
}

// 预冷阀控制
void actuator_set_precool_valve(bool enable) {
    control_precool_solenoid(enable);
    printf("Precool valve: %s\n", enable ? "ON" : "OFF");
}

// 主电机控制
void actuator_set_main_motor(bool enable) {
    control_main_motor(enable);
    printf("Main motor: %s\n", enable ? "ON" : "OFF");
}

// 膨化泵控制
void actuator_set_pump(bool enable) {
    control_expansion_pump(enable);
    printf("Pump: %s\n", enable ? "ON" : "OFF");
}

// 杀菌灯控制 
void actuator_set_sterilize_light(bool enable) {
    control_sterilizing_lamp(enable);
    printf("Sterilize light: %s\n", enable ? "ON" : "OFF");
}

// 提升电机控制
void actuator_set_discharge_plunger(bool enable) {
    control_lifting_motor_up(enable);
    printf("Discharge plunger (1/2 ZZ/FZ): %s\n", enable ? "ON" : "OFF");
}